GitHub GraphQL API でIssuesを作成し、コメントを追加する
GitHubのGraphQL APIを利用して、Issuesの作成とコメント追加をしてみました。
2024.06.14
GitHubのGraphQL APIを利用して、Issuesの作成とコメント追加をしてみました。
おすすめの方
- GitHub GraphQL APIについて知りたい方
- GitHub GraphQL APIでIssuesを作成したい方
- GitHub GraphQL APIでIssuesにコメントを追加したい方
- GitHub GraphQL APIで変数を使いたい方
Issues作成時にラベルを付与する場合は、事前にラベルを作成しておき、ラベルIDを取得する
Issueの作成と同時にラベルを付与する場合は、ラベルIDを指定します。 ラベルIDを取得する方法は、次の記事を参考にしてください。
本記事では、3つあるラベルのうち、1つのラベルを付与してみます。
GitHub GraphQL API でIssuesを作成するスクリプト
リポジトリIDを取得して、Issuesを作成し、IssueIdを取得します。 そのIssueIdを利用して、コメントを追加しています。
import requests import json ENDPOINT = "https://api.github.com/graphql" GITHUB_TOKEN = "aaa" GITHUB_REPOSITORY_OWNER = "xxx" GITHUB_REPOSITORY_NAME = "yyy" # 作成と同時にラベルを付与する場合は、ラベルIDを指定する LABELS = [ "LA_kwDOLfC6C88AAAABkSNoSg", # aaa ] def main(): # リポジトリIDを取得する repository_id = get_repository_id(GITHUB_REPOSITORY_OWNER, GITHUB_REPOSITORY_NAME) # Issueを作成する issue_id = create_issue( repository_id, title="GitHub GraphQL API Test Issue", body="# Memo\n\nThis is a test issue created by GitHub GraphQL API.", labels=LABELS, ) # Issueにコメントを追加する add_comment(issue_id, "This is a test comment.\n\n**Hello, world!**") def get_repository_id( repository_owner, repository_name, ): query = """ query getProjectLabels($repositoryOwner:String!, $repositoryName:String!) { repository(owner: $repositoryOwner, name: $repositoryName) { id } } """ variables = { "repositoryOwner": repository_owner, "repositoryName": repository_name, } resp = requests.post( ENDPOINT, headers=get_headers(), data=json.dumps({"query": query, "variables": variables}), ) body = resp.json() return body["data"]["repository"]["id"] def create_issue(repository_id, title, body, labels=[]): mutation = """ mutation CreateIssue($repositoryId: ID!, $title: String!, $body: String, $labelIds: [ID!]) { createIssue(input: {repositoryId: $repositoryId, title: $title, body: $body, labelIds: $labelIds}) { issue { id number title bodyText } } } """ variables = { "repositoryId": repository_id, "title": title, "body": body, "labelIds": labels, } resp = requests.post( ENDPOINT, headers=get_headers(), data=json.dumps({"query": mutation, "variables": variables}), ) body = resp.json() return body["data"]["createIssue"]["issue"]["id"] def add_comment(issue_id, body): mutation = """ mutation AddComment($issueId: ID!, $body: String!) { addComment(input: {subjectId: $issueId, body: $body}) { commentEdge { node { id body } } } }""" variables = { "issueId": issue_id, "body": body, } resp = requests.post( ENDPOINT, headers=get_headers(), data=json.dumps({"query": mutation, "variables": variables}), ) body = resp.json() def get_headers(): return { "Authorization": f"bearer {GITHUB_TOKEN}", } if __name__ == "__main__": main()
スクリプトを実行する
python create_issue.py
Issuesを作成できた
バッチリです。